package com.one.tank;

public class EnemyTank extends Tank {
    /**
     * 构造函数
     *
     * @param x         坦克左上角X坐标
     * @param y         坦克左上角Y坐标
     * @param direction 坦克方向
     */
    public EnemyTank(int x, int y, int direction) {
        super(TANK_TYPE_ENEMY, x, y, direction);
    }

    //敌方坦克开始工作运转
    @Override
    public void work() {
        super.work();
        //启动线程让敌方坦克跑
        new Thread(() -> {
            while (this.getState() == TANK_GO) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //随机确认是原地不动还是移动（0-不动，其它-移动）
                if (GameLogic.getRandomInt(0, 8) != 0) {
                    //移动（概率设大点）
                    //随机确认是改变方向还是向前移动（0-改变方向，其它-向前移动）
                    if (GameLogic.getRandomInt(0, 12) == 0) {
                        //改变方向（概率设小点）
                        int newDirection = GameLogic.getRandomInt(UP, LEFT + 3);
                        if (newDirection > LEFT) {
                            //向下概率设大点
                            newDirection = DOWN;
                        }
                        this.setDirection(newDirection);
                    } else {
                        //向前移动
                        //如果到边界了就别运动了，要换方向
                        boolean toBorder = false;
                        switch (this.getDirection()) {
                            case UP:
                                if ((this.getY() - this.getSpeed()) < 0) {
                                    toBorder = true;
                                }
                                break;
                            case DOWN:
                                if ((this.getY() + TANK_HEIGHT + this.getSpeed()) > GamePanel.GAME_HEIGHT) {
                                    toBorder = true;
                                }
                                break;
                            case LEFT:
                                if ((this.getX() - this.getSpeed()) < 0) {
                                    toBorder = true;
                                }
                                break;
                            case RIGHT:
                                if ((this.getX() + TANK_WIDTH + this.getSpeed()) > GamePanel.GAME_WIDTH) {
                                    toBorder = true;
                                }
                                break;
                        }
                        //到达边界处
                        if (toBorder) {
                            int newDirection = GameLogic.getRandomInt(UP, LEFT);
                            this.setDirection(newDirection);
                        }
                        //继续前进
                        else {
                            this.move(this.getDirection());
                        }
                    }
                }
                //随机确认是发射子弹还是省子弹（1-发射，其它-不发射）
                if (GameLogic.getRandomInt(0, 8) == 1) {
                    //发射子弹
                    this.fire();
                }
            }
        }).start();
    }
}
